﻿#ifndef _ART2523_DEVICE_
#define _ART2523_DEVICE_

#ifndef _ART2523_DRIVER_
#define DEVAPI __declspec(dllimport)
#else
#define DEVAPI __declspec(dllexport)
#endif

#ifdef __cplusplus
extern "C" {
#endif

	//######################## 常规通用函数 #################################
	// 适用于本设备的最基本操作
	HANDLE DEVAPI FAR PASCAL ART2523_CreateDevice(WORD wBaseAddr);  // 创建设备对象
    	BOOL DEVAPI FAR PASCAL ART2523_ReleaseDevice(HANDLE hDevice);	// 释放设备对象

	//####################### 数字I/O输入输出函数 #################################
	// 用户可以使用WriteRegisterULong和ReadRegisterULong等函数直接控制寄存器进行I/O
	// 输入输出，但使用下面两个函数更省事，它不需要您关心寄存器分配和位操作等，而只
	// 需象VB等语言的属性操作那么简单地实现各开关量通道的控制。
						    
						    // 输出开关量状态   // 设备对象句柄,它由CreateDevice函数创建
	BOOL DEVAPI FAR PASCAL ART2523_SetDeviceDO(   HANDLE hDevice,              BYTE bDOSts[16]);			
	
	// DO参数(注意: 必须定义为16个字节元素的数组)
	//################# I/O端口直接操作及读写函数 ########################
	// 适用于用户对本设备更直接、更特殊、更低层、更复杂的控制。比如根据特殊的
	// 控制对象需要特殊的控制流程和控制效率时，则用户可以使用这些接口予以实现。
	// 但这些函数主要适用于传统设备，如ISA总线、并口、串口等设备

										
    BOOL DEVAPI FAR PASCAL ART2523_WritePortByte(HANDLE hDevice, UINT nPort, BYTE Value);
    BOOL DEVAPI FAR PASCAL ART2523_WritePortWord(HANDLE hDevice, UINT nPort, WORD Value);
    BOOL DEVAPI FAR PASCAL ART2523_WritePortULong(HANDLE hDevice, UINT nPort, ULONG Value);

    BYTE DEVAPI FAR PASCAL ART2523_ReadPortByte(HANDLE hDevice, UINT nPort);
    WORD DEVAPI FAR PASCAL ART2523_ReadPortWord(HANDLE hDevice, UINT nPort);
    ULONG DEVAPI FAR PASCAL ART2523_ReadPortULong(HANDLE hDevice, UINT nPort);
	
#ifdef __cplusplus
}
#endif

// 自动包含驱动函数导入库
#ifndef _ART2523_DRIVER_
	#pragma comment(lib, "ART2523.lib")
	#pragma message("======== Welcome to use our art company product!")
	#pragma message("======== Automatically linking with ART2523.dll...")
	#pragma message("======== Successfully linked with ART2523.dll")
#endif

#endif // _ART2523_DEVICE_
